﻿#include<stdio.h>

/*在一个整型数组中，只有一个数字出现一次，其他数组都是成对出现的，请找出那个只出现一次的数字。
例如： 数组中有：1 2 3 4 5 1 2 3 4，只有5出现一次，其他数字都出现2次，找出5
int main()
{
	unsigned int arr[9] = { 1,2,3,4,5,1,2,3,4 };
	int c = 0;
	 c = arr[0] ^ arr[1] ^ arr[2] ^ arr[3] ^ arr[4] ^ arr[5] ^arr[6]^ arr[7] ^ arr[8];
	printf("单身狗是:%d",c);
	return 0;

}
//不允许创建临时变量，交换两个整数的内容
int main()
{
	int a = 3;
	int b = 6;
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("a=%d b=%d", a, b);
	return 0;
}*/
//写一个函数返回参数二进制中 1 的个数。 比如： 15    0000 1111    4 个 1
int yy(int m)
{
	int b = 0;
	for (int i = 0;i < 32;i++)
	{
		if (((m >> i) & 1) == 1)
			b++;
	}
	return b;
}
int main()
{
	int n = 15;
	int c = yy(n);
    printf("1的个数为：%d", c);
	return 0;
}/*
//获取一个整数二进制序列中所有的偶数位和奇数位，分别打印出二进制序列
int main()
{
	int d=0;
	int c=0;
	int a = 15;
	printf("奇数位：");
	for (int i = 31;i>=0;i-= 2)
	{
		int c = (a >> i) & 1;
		printf("%d", c);
	}
	printf("\n");
	printf("偶数位：");
   for(int b =30;b>=0;b-=2)
	{
		int d = (a >> b)&1;
        printf("%d", d);
	}
	printf("\n");
	return 0;
}
//两个int（32位）整数m和n的二进制表达中，有多少个位(bit)不同？  输入例子: 1999 2299 输出例子:7

int main() 
{
	int m = 1999;
	int n = 2299;
	int count = 0;
	int c = m ^ n;
	for (int i = 0;i < 32;i++)
	{
		if (((c >> i) & 1) == 1)
			count++;
	}
	printf("有%d个bit位不同",count);
	return 0;
}*/